home *** CD-ROM | disk | FTP | other *** search
/ A Field Trip to the Sky (Demo) / Mac_Sunburst_AFieldTripToTheSky-Demo.iso / DIR / TERMS.DIR / 00019_Script_create terms text < prev    next >
Text File  |  1996-03-21  |  11KB  |  352 lines

  1.  
  2. -- ïï processTermFile ïï
  3. -- create cast members from the term file
  4. on zprocessTermFile theLetters, whichPhrase
  5.   
  6.   set theFileName to the moviePath & theLetters & ".txt"
  7.   
  8.   set theLineHgt to 14
  9.   if the machineType = 256 then 
  10.     set theLineHgt to 17 
  11.   end if
  12.   
  13.   -- open the file and read it in
  14.   put fileio( mNew, "read", theFileName ) into theFile
  15.   if objectP(theFile) = TRUE then
  16.     put theFile(mReadFile) into theFileText
  17.     theFile(mDispose)
  18.     
  19.     -- set up phrases
  20.     set thisPhrase to ""
  21.     set lastPhrase to ""
  22.     set phraseCount to 0
  23.     
  24.     set numPhrases to 0
  25.     
  26.     -- setup page cast
  27.     if the movieName contains "TERMS.DIR" then
  28.       set curPage to 1
  29.       set curC to createNewPageCast( theLetters, curPage )
  30.     end if
  31.     
  32.     repeat with i = 1 to the number of lines of theFileText
  33.       
  34.       set theLine to line i of theFileText
  35.       if charToNum(char 1 of theLine) = 10 then
  36.         set theLine to char 2 to length(theLine) of theLine
  37.       end if
  38.       
  39.       set thisPhrase to getPhrase(theLine)
  40.       
  41.       if thisPhrase <> "" then
  42.         
  43.         if thisPhrase = lastPhrase then
  44.           set phraseCount to phraseCount  + 1
  45.         else 
  46.           set phraseCount to 1
  47.         end if
  48.         
  49.         -- look ahead
  50.         if phraseCount = 1 AND whichPhrase = 2 then
  51.           set theLine2 to line i+1 of theFileText
  52.           if charToNum(char 1 of theLine2) = 10 then
  53.             set theLine2 to char 2 to length(theLine2) of theLine2
  54.           end if
  55.           
  56.           if getPhrase(theLine2) <> thisPhrase then 
  57.             set phraseCount = 2
  58.             
  59.           end if
  60.           
  61.         end if
  62.         
  63.         -- add the cast member if we're on the right one
  64.         if phraseCount = whichPhrase then
  65.           
  66.           put "ïï putting phrase '" & thisPhrase & "' into cast '" & the name of cast curC & "'"
  67.           
  68.           -- create the cast member
  69.           set c to createTextCast(thisPhrase, theLine)
  70.           
  71.           -- add it to the page if necessary
  72.           if the movieName contains "TERMS.DIR" then
  73.             
  74.             -- is there an image?
  75.             set imageNum to the number of cast thisPhrase
  76.             if imageNum <> -1 then
  77.               set imageHgt to (the height of cast imageNum) + theLineHgt * 2 + 1
  78.             else
  79.               set imageHgt to 0
  80.             end if
  81.             
  82.             set imageLines to imageHgt /  theLineHgt
  83.             
  84.             
  85.             -- index everything
  86.             updateTermIndex( thisPhrase, the name of cast curC, numPhrases )
  87.             set numPhrases to numPhrases + 1
  88.             
  89.             if curPage = 1 then 
  90.               set pageLen to 17 * theLineHgt
  91.             else
  92.               set pageLen to 23 * theLineHgt
  93.             end if
  94.             
  95.             if the machineType = 256 then
  96.               if curPage = 1 then 
  97.                 set pageLen to 14 * theLineHgt
  98.               else
  99.                 set pageLen to 20 * theLineHgt
  100.               end if
  101.               
  102.             end if
  103.             
  104.             set nChars to length(field curC)
  105.             
  106.             
  107.             -- stick this text onto the page cast
  108.             put field c after field curC
  109.             
  110.             set nNewWords to the number of words of field c
  111.             repeat while (the height of cast curC) > pageLen 
  112.               set nNewWords to nNewWords - 1
  113.               delete word (the number of words of field curC) of field curC
  114.             end repeat
  115.             
  116.             --            -- now add the carriage returns if we need room for a diagram
  117.             --            if the last word of field c contains "]" then
  118.             --              --put "adding cr ",the last word of field c
  119.             --              set t to 1
  120.             --              set theAddString to ""
  121.             --              repeat while t < 10 AND ((the height of cast curC) + t*theLineHgt) <= pageLen
  122.             --                set t to t + 1
  123.             --                set theAddString to theAddString & RETURN
  124.             --              end repeat
  125.             --              
  126.             --              put theAddString after field curC
  127.             --            else 
  128.             --              -- put "NOT adding cr ",the last word of field c
  129.             --              set t to 0
  130.             --            end if
  131.             
  132.             
  133.             -- boldify
  134.             set the textStyle of line (the number of lines of field curC) of field curC to "plain"
  135.             set the textstyle of char nChars+1 to nChars + length(thisPhrase) ¬
  136. of field curC to "bold"
  137.             set the textStyle of char (nChars + length(thisPhrase) + 1) to length(field curC) ¬
  138. of field curC to "plain"
  139.             
  140.             -- stick in a cr if we fit everything on
  141.             if nNewWords = the number of words of field c then
  142.               put RETURN & RETURN after field curC
  143.             end if
  144.             
  145.             -- if we've maxed out this page, create a new one
  146.             repeat while the height of cast curC >= pageLen then
  147.               
  148.               set curPage to curPage + 1
  149.               set curC to createNewPageCast( theLetters, curPage )
  150.               
  151.               -- stick in the rest
  152.               if nNewWords < (the number of words of field c) then
  153.                 put "  overflow...", (the number of words of field c) - nNewWords
  154.                 set the text of cast curC to (word (nNewWords+1) to ¬
  155. (the number of words of field c) of field c)
  156.                 set nNewWords to (the number of words of field c)
  157.               end if
  158.               
  159.               repeat while (the height of cast curC) > pageLen
  160.                 set nNewWords to nNewWords - 1
  161.                 delete word (the number of words of field curC) of field curC
  162.               end repeat
  163.               
  164.               
  165.               -- stick in a cr if we fit everything on
  166.               if (nNewWords = the number of words of field c) AND length(field curC) > 0 then
  167.                 put RETURN & RETURN after field curC
  168.               end if
  169.               
  170.             end repeat
  171.             
  172.             -- lastly, check for picture
  173.             if imageLines <> 0 then
  174.               
  175.               put "  adding image " & thisPhrase
  176.               
  177.               -- add a new page and pad it if we must
  178.               if (pageLen - the height of cast curC) <= (5 * imageHgt / 6) then
  179.                 set curPage to curPage + 1
  180.                 set curC to createNewPageCast( theLetters, curPage )
  181.               end if
  182.               
  183.               -- if we can fit it + more text, add crs.
  184.               if( the height of cast curC + imageHgt < pageLen ) then
  185.                 repeat with addcr = 1 to imageLines 
  186.                   put RETURN after field curC
  187.                 end repeat               
  188.                 
  189.               end if
  190.               
  191.             end if
  192.             
  193.             
  194.             
  195.             -- now add the carriage returns if we need room for a diagram
  196.             --            if t > 0 then
  197.             --              set theAddString to ""
  198.             --              repeat while t < 10 AND ((the height of cast curC) + t*theLineHgt) <= pageLen
  199.             --                set t to t + 1
  200.             --                set theAddString to theAddString & RETURN
  201.             --              end repeat
  202.             --              
  203.             --              put theAddString after field curC
  204.             --            end if
  205.             
  206.             
  207.           end if -- we're on the right track
  208.           
  209.         end if -- got a nonnull line
  210.         
  211.         set lastPhrase to thisPhrase
  212.       end if
  213.       
  214.     end repeat -- looping through lines of "abc.txt"
  215.     
  216.     --make an evn number of text members
  217.     if (curPage mod 2) = 1 then
  218.       set curPage to curPage + 1
  219.       createNewPageCast( theLetters, curPage )
  220.     end if
  221.     
  222.     
  223.   else
  224.     alert "Error opening file" && theFileName && ":" && string(theFile)
  225.   end if
  226.   
  227. end 
  228.  
  229. -- ïï getPhrase ïï
  230. -- get the title of a definition line
  231. on getPhrase theLine
  232.   
  233.   set thePhrase to ""
  234.   
  235.   if the number of words of theLine > 0 then
  236.     set o to offset(":", theLine)
  237.     set thePhrase to char 1 to (o-1) of theLine
  238.     
  239.   end if
  240.   
  241.   return thePhrase
  242.   
  243. end
  244.  
  245.  
  246. -- ïï createTextCast ïï
  247. on createTextCast thePhrase, theLine
  248.   
  249.   set theCastName to thePhrase
  250.   
  251.   -- does it exist?
  252.   if the movieName contains "TERMS.DIR" then
  253.     set c to 29
  254.   else
  255.     
  256.     set c to 0
  257.     repeat with i = 30 to 249
  258.       if the castType of cast i = #text then
  259.         if the name of cast i = theCastName then
  260.           set c to i
  261.           exit repeat
  262.         end if
  263.       end if
  264.       
  265.     end repeat
  266.   end if
  267.   
  268.   -- it doesn't exist - create it
  269.   if c = 0 then
  270.     set c to findEmpty( cast 30 )
  271.     duplicate cast "template text", c
  272.     set the name of cast c to theCastName
  273.     
  274.   end if
  275.   
  276.   -- set it up
  277.   put theLine & " " into field c
  278.   set the textfont of field c to "palatino"
  279.   set the textstyle of field c to "plain"
  280.   set the textstyle of char 1 to length(thePhrase) of field c to "bold"
  281.   set the textStyle of char (length(thePhrase) + 1) to length(theLine) of field c to "plain"
  282.   
  283.   delete char length(field c) of field c
  284.   
  285.   put "createTextCast:" && QUOTE & theCastName & QUOTE && c, the height of cast c
  286.   
  287.   return c
  288. end
  289.  
  290.  
  291. -- ïï createNewPageCast ïï
  292. -- 
  293. on createNewPageCast theLetters, theNum
  294.   
  295.   set curC to 0
  296.   set theCastName to theLetters && "Page" && string(theNum)
  297.   
  298.   set curC to the number of cast theCastName
  299.   
  300.   if curC = -1 then
  301.     
  302.     if theNum mod 2 = 1 then
  303.       put findEmpty( cast 132 ) into curC
  304.       duplicate cast "Page Template 2", curC 
  305.     else
  306.       put findEmpty( cast 32 ) into curC
  307.       duplicate cast "Page Template 1", curC 
  308.     end if
  309.     
  310.     set the name of cast curC to theLetters && "Page" && string(theNum)
  311.   end if
  312.   
  313.   put "createNewPageCast", curC, the name of cast curC
  314.   
  315.   put " " into field curC
  316.   set the textStyle of field curC to "plain"
  317.   set the textFont of field curC to "palatino"
  318.   put "" into field curC
  319.   
  320.   return curC
  321. end
  322.  
  323.  
  324. -- ïï updateTermIndex ïï
  325. -- for each term, remember which page its on and get its audio file
  326. on updateTermIndex theTerm, theTermPageName, numPhrases
  327.   
  328.   set theText to the text of cast "Audio Files"
  329.   
  330.   set smallC to the number of cast (theTerm && "info")
  331.   
  332.   if smallC = -1 then
  333.     set smallC to findEmpty(cast 1400)
  334.     duplicate cast "abc index", smallC
  335.     set the name of cast smallC to (theTerm && "info") 
  336.   end if
  337.   
  338.   if theText contains (RETURN & theTerm & RETURN) then
  339.     set o to offset(RETURN & theTerm & RETURN, theText)
  340.     set o to o + length(theTerm) + 2
  341.     set theAudio to ""
  342.     repeat while char o of theText <> RETURN
  343.       set theAudio to theAudio & char o of theText
  344.       set o to o + 1
  345.     end repeat
  346.   end if
  347.   
  348.   set theNumber to (the number of cast theTermPageName) - 31
  349.   
  350.   set the text of cast smallC to theNumber && theAudio
  351. end
  352.